package cn.com.ninng;

/**
 *59. 螺旋矩阵 II
 * 给你一个正整数 n ，生成一个包含 1 到 n2 所有元素，且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
 * @author liulekang
 * @createdate 2021/7/30
 */
public class Problem59 {

    public static void main(String[] args) {
        System.out.println(generateMatrix(3));
    }


    public static int[][] generateMatrix(int n) {
        //定义一个n*n的矩阵（二维数组）
        //分别定义上下左右的边界，依次放值进去
        //定义当前需要放置的数字是num
        // 终止条件就是 num > n * n
        int[][] arr = new int[n][n];
        int num = 1;
        int left = 0,r = n-1,up = 0,down = n-1;
        while (num <= n*n) {

            //从左往右放,放到右边界
            for (int i = left; i <= r ; i++) {
                arr[up][i] = num;
                num+=1;
            }
            //一整行放满了，上边界缩小
            up+=1;

            //从上往下放，放到下边界
            for (int i = up; i <= down; i++) {
                arr[i][r] = num;
                num+=1;
            }
            //右边一竖行放满了，右边界缩小
            r-=1;

            //从右往左放，放到左边界
            for (int i = r; i >= left; i--) {
                arr[down][i] = num;
                num++;
            }
            //下边一行满了，缩小下边界
            down-=1;

            //从下往上放，放到上边界
            for (int i = down; i >= up; i--) {
                arr[i][left] = num;
                num++;
            }
            //左边一竖行满了，缩小左边界
            left+=1;
        }
        return arr;
    }
}
